package utils

import (
	"fmt"
	"time"

	"github.com/dgrijalva/jwt-go"
)


var secretKey = []byte("your_secret_key")

// Claims 结构体定义了JWT的负载信息
type Claims struct {
	Useridentity   string    `json:"useridentity"`
	Username string `json:"username"`
	jwt.StandardClaims
}


func CreateJWT(username string) ( usertoken string, err error) {
	// 创建一个JWT的Claims
	claims := Claims{
		Useridentity:   "普通用户",
		Username: username,
		StandardClaims: jwt.StandardClaims{
			ExpiresAt: time.Now().Add(24*time.Hour).Unix(), // 设置JWT的过期时间
		},
	}

	// 使用HMAC SHA256算法签名JWT
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

	// 签名生成token字符串
	tokenString, err := token.SignedString(secretKey)
	if err != nil {
		return "", err
	}

	return tokenString, nil
}

func DecodeJWT(tokenString string) (*Claims, error) {
	// 解析token
	token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {
		return secretKey, nil
	})

	// 验证token的有效性
	if err != nil {
		return nil, err
	}

	// 检查token是否有效并返回Claims
	if claims, ok := token.Claims.(*Claims); ok && token.Valid {
		return claims, nil
	}

	return nil, fmt.Errorf("Invalid JWT")
}